home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 June / EnigmA AMIGA RUN 08 (1996)(G.R. Edizioni)(IT)[!][issue 1996-06][EARSAN CD VII].iso / earcd / utildsk / hdsleep.lha / HDSleep / Source / beginio.a next >
Text File  |  1996-04-26  |  2KB  |  78 lines

  1.     SECTION assembly,code
  2.  
  3.     XREF _OldBeginIO
  4.     XREF _Computer
  5.  
  6. ;
  7. ; Call scsi.device BeginIO()
  8. ; void CallBeginIO(struct register __a1 struct IORequest *);
  9. ;
  10.  
  11.     XDEF _CallBeginIO
  12. _CallBeginIO:
  13.     move.l _OldBeginIO,a0
  14.     jmp (a0)
  15.  
  16. ;    jsr (a0)
  17. ;    rts
  18.  
  19. ;
  20. ; Turn unit D0 to sleep
  21. ; void HDDriveOff(register __d0 UBYTE HDUnit);
  22. ;
  23.  
  24.     XDEF _HDDriveOff
  25. _HDDriveOff:
  26.     move.l    (4).w,a0    ; Get ExecBase
  27.     jsr    -$84(a0)    ; Forbid();
  28.     jsr    ChangeUnit    ; ChangeUnit();
  29.     cmp.l    #0,_Computer    ; if 1 then a4000
  30.     beq    a1200
  31.     lea    $dd203e,a0    ; HD command register (A1200)
  32.     bra    skip
  33. a1200:    lea    $da201e,a0    ; HD command register (A4000)
  34. skip:    move.b    #$e0,(a0)    ; Standby Immediate
  35.     move.b    #$e3,(a0)    ; Idle
  36. OffEnd:    move.l    (4).w,a0    ; Get ExecBase
  37.     jsr    -$8a(a0)    ; Permit();
  38.     rts
  39.  
  40. ;
  41. ; Check unit D0 for hd present (does it work?)
  42. ; UBYTE CheckHD(register __d0 UBYTE HDUnit);
  43. ;
  44.  
  45.     XDEF _CheckHD
  46. _CheckHD:
  47.     move.l    (4).w,a0    ; Get ExecBase
  48.     jsr    -$84(a0)    ; Forbid();
  49.     jsr    ChangeUnit    ; ChangeUnit();
  50.     clr.b    d0
  51.     tst.l    _Computer    ; if 1 then a4000
  52.     beq    a4k3
  53.     cmpi.b    #$50,($da201e)    ; HD status register (A1200)
  54.     seq    d0        ; if(DrivePresent) d0=TRUE;
  55.     bra    skip2
  56. a4k3:    cmpi.b    #$50,($dd203e)    ; HD status register (A4000)
  57.     seq    d0        ; if(DrivePresent) d0=TRUE;
  58. skip2:    move.l    (4).w,a0    ; Get ExecBase
  59.     jsr    -$8a(a0)    ; Permit()
  60.     rts
  61.  
  62. ;
  63. ; Change to Unit D0
  64. ; void ChangeUnit(register __d0 UBYTE HDUnit);
  65. ;
  66.  
  67. ChangeUnit:
  68.     asl.l    #4,d0
  69.     ori.w    #$a0,d0
  70.     cmp.l    #0,_Computer    ; if 1 then a4000
  71.     beq    a12002
  72.     move.b    d0,($dd203a)    ; HD drive/unit register (A1200)
  73.     rts
  74. a12002:    move.b    d0,($da201a)    ; HD drive/unit register (A4000)
  75.     rts
  76.  
  77.     end
  78.